
import utils.ByteArrayUtil;

import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;

// 主应用程序类
public class MainApp {

    // 程序主入口
    public static void main(String[] args) throws NoSuchAlgorithmException {
        // 创建一个映射数据库，用于存储名称与分数的映射
        Map<String, Integer> scoreMap = new HashMap<>();
        scoreMap.put("Zhangsan", 111);
        scoreMap.put("Lisi", 222);
        scoreMap.put("Wangwu", 333);

        // 定义一组对等体地址和组名称
        String[] addresses = new String[]{"localhost:8081", "localhost:8082", "localhost:8083"};
        String groupName = "scores";

        // 为每个对等体启动一个EasyCache实例
        for (String peerKey : addresses) {
            EasyCache easyCache = new EasyCache();
            // 创建一个新的组，设置查询逻辑
            easyCache.newGroup(groupName, 3, key -> {
                System.out.println("[EasyCache] 正在查询: " + key);
                Integer value = scoreMap.get(key);
                if (value != null) {
                    return ByteArrayUtil.oToB(value);
                }
                return null;
            });
            // 启动缓存服务器
            easyCache.startCacheServer(peerKey, addresses, groupName);
        }

        // 启动一个新的线程，用于API服务器
        new Thread(() -> {
            EasyCache easyCache = new EasyCache();
            // 创建一个新的组，设置查询逻辑
            easyCache.newGroup(groupName, 3, key -> {
                System.out.println("[EasyCache] 正在查询: " + key);
                Integer value = scoreMap.get(key);
                if (value != null) {
                    return ByteArrayUtil.oToB(value);
                }
                return null;
            });
            // 启动API服务器
            try {
                easyCache.startAPIServer("localhost:8084", addresses, groupName);
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
        }).start();
    }
}
